package org.wheres2.utils;

/**
 * La classe implementa il protocollo di comunicazione tra i client wheres
 * Tale protocollo si pone a livello immediatamente superiore ad XMPP 
 * 
 * @author 
 *
 */
public class MessageMod {

	private static final String REQUEST_TAG = "org.wheres.location.request";
	private static final String POSITION_TAG = "org.wheres.location.position";
	
	private static String REQUEST_POS_TEXT_MESSAGE="Voglio la tua posizione"; 
	public static int REQUEST = 1;
	public static int POSITION = 2;
	public static int OTHER=0;
	
	/**
	 * 
	 * Crea il testo del messaggio a partire dai dati in ingresso
	 * 
	 * @param latLong latitutine e longitudine 
	 * @param accuracy precisione della posizione
	 * @param time timestamp della posizione
	 * 
	 * @return un oggetto di tipo String rappresentativo del messaggio
	 */
	public static String recTextMessage(double[] latLong, float accuracy, long time){
		String message;
		message= MessageMod.POSITION_TAG + "$" + latLong[0] 
										 + "*" + latLong[1]
										 + "#" + accuracy 
										 + "@" + time;
		return message;
		
	}
	
	/**
	 * Estrae i valori del messaggio in ingresso 
	 * 
	 * @param message il messaggio ricevuto
	 * @return un vettore di String che contiene i valori associati al messaggio
	 * 
	 */
	public static String[] extractValues(String message){
		String[] values=new String[4];
		values[0]=message.substring(message.indexOf("$")+1, message.indexOf("*"));
		values[1]=message.substring(message.indexOf("*")+1, message.indexOf("#"));
		values[2]=message.substring(message.indexOf("#")+1, message.indexOf("@"));
		values[3]=message.substring(message.indexOf("@")+1);
		return values;
		
	}
	
	
	/**
	 * Restituisce il messaggio per la richiesta della posizione
	 * 
	 * @return un oggetto di tipo String rappresentativo del messaggio
	 * 
	 */
	public static String getSendTextMessage() {
		return MessageMod.REQUEST_TAG + REQUEST_POS_TEXT_MESSAGE;
	}
	
	
	/**
	 * 
	 * Identifica il tipo di messaggio a partire dal messaggio ricevuto
	 * 
	 * @param message il messaggio ricevuto
	 * 
	 * @return il tipo di messaggio ricevuto
	 * 
	 */
	public static int getMessageType(String message){
		if(message.contains(MessageMod.REQUEST_TAG))
			return REQUEST;
		else if(message.contains(MessageMod.POSITION_TAG))
			return POSITION;
		return OTHER;
			
	}
}
